import getFieldsDescrible from '../../utils/form-fields-desc';

export default {
    attributes: getFieldsDescrible(),
    events: [
        {
            name: 'submit',
            des: '点击表单提交(通过校验才会触发)；第一个参数为表单对象，第二个为关闭提交按钮加载中状态的回调函数（提交完成后，需要手动调用该方法来关闭提交按钮加载中状态）',
            params: '(form, cb)',
        },
        {
            name: 'reset',
            des: '表单清空事件',
            params: '-',
        },
        {
            name: 'item-change',
            des: '某个表单项值发生变化抛出的事件，第一个参数为表单项的数据对象，包含该表单项当前的值(value)、值对应的名称(label)，以及当前选中的数据(data)；第二个参数为表单项在 fields 中对应的配置数据',
            params: '({ value, label, data }, field, currentForm)',
        },
        {
            name: 'options-inited',
            des: '表单项初始化 options 选项完成后抛出的方法；例如某个下拉选择控件配置了自动请求下拉数据的接口，当获取到选项数据并初始化下拉控件的选项后，则会触发该方法，参数为获取到的 options 和表单项配置',
            params: '(options, field)',
        },
        {
            name: 'enter',
            des: '在输入框按回车提交表单抛出的事件（需配置 enterable 为 true）',
            params: '(value, field)',
        },
        {
            name: 'focus',
            des: '输入框获得焦点时触发',
            params: '(value, field, event)',
        },
        {
            name: 'blur',
            des: '输入框失去焦点时触发',
            params: '(value, field, event)',
        },
        {
            name: 'clear',
            des: '点击清除按钮时触发',
            params: '(field)',
        },
        {
            name: 'expand',
            des: '表单项展开或折叠（show-expand 为 true 有效）',
            params: '(expanded)',
        },
        {
            name: 'validate',
            des: '任一表单项被校验后触发',
            params: '(prop, isValid, message)',
        },
    ],
    slots: [
        {
            name: '[fields[].code]',
            des: 'fields 内的配置项支持配置 type: \'slot\'，此时表单内部将开启对应插槽，插槽名为该配置项的 code',
            params: '{ form, field, index }',
        },
        {
            name: 'more-operations',
            des: '插入提交、重置按钮后面，可用于添加其他按钮',
            params: '{ form }',
        },
        {
            name: '[fields[].code]-input-prepend',
            des: 'type 为 "text"、"password"、"table"、"tree" 的控件支持配置控件头部的内容插槽，插槽名为该控件对象的 code 拼接上 "-input-prepend"',
            params: '{ form, field, index }',
        },
        {
            name: '[fields[].code]-input-append',
            des: 'type 为 "text"、"password"、"table"、"tree" 的控件支持配置控件尾部的内容插槽，插槽名为该控件对象的 code 拼接上 "-input-append"',
            params: '{ form, field, index }',
        },
        {
            name: '[fields[].code]-option',
            des: 'type 为 "select" 的控件支持配置控件选项的内容插槽，插槽名为该控件对象的 code 拼接上 "-option"',
            params: '{ option, options, field }',
        },
        {
            name: '[fields[].code]-upload',
            des: 'type 为 "upload" 的上传控件支持自定义上传按钮区域的内容，插槽名为该控件对象的 code 拼接上 "-upload"',
            params: '{ form, field, index }',
        },
    ],
    refs: [
        {
            name: 'submit',
            des: '手动触发提交按钮的点击',
            params: '-',
            return: '-',
        },
        {
            name: 'reset',
            des: '手动触发重置按钮的点击',
            params: '-',
            return: '-',
        },
        {
            name: 'validate',
            des: '对整个查询表单的内容进行验证。 支持接收一个callbcak，验证完成后会执行该 callbcak',
            params: 'callback',
            return: 'Promise<void>',
        },
        {
            name: 'validateField',
            des: '验证具体的某个字段，可以传入数组',
            params: '(fieldCode | undefined, callback)',
            return: 'FormValidationResult',
        },
        {
            name: 'clearValidate',
            des: '清理某个字段的表单验证信息，可以传入数组',
            params: '(fieldCode | undefined)',
            return: '-',
        },
        {
            name: 'resetFields',
            des: '重置该表单项，将其值重置为初始值，并移除校验结果',
            params: '(fieldCode | undefined)',
            return: '-',
        },
        {
            name: 'scrollToField',
            des: '滚动到对应表单项的位置',
            params: '(fieldCode | undefined)',
            return: '',
        },
        {
            name: 'abort',
            des: '若表单中存在上传组件，执行该方法可以取消对应上传组件的上传请求',
            params: '(fieldCode, file)',
            return: '',
        },
        {
            name: 'clearFiles',
            des: '若表单中存在上传组件，执行该方法可以清空已上传的文件列表',
            params: '(fieldCode, status?: Array<"ready" | "uploading" | "success" | "fail">)',
            return: '',
        },
        {
            name: 'handleRemove',
            des: '若表单中存在上传组件，执行该方法可以手动移除文件',
            params: '(fieldCode, file)',
            return: '',
        },
    ],
};
